from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://scott:tiger@localhost:port/foo'
"""
mysql：使用 mysql 数据库
pymysql：使用 pymysql 引擎
scott：数据库用户名
tiger：数据库密码
localhost：数据库的地址ip
port：端口号
foo：数据库的库
"""
# 初始化一个db
db = SQLAlchemy(app)

# 使用db 可以让User类映射到数据库中的User表，即ORM技术
class User(db.Model):
    """类就是表名，id username email就是表头，省略MySQL语句来操作数据库"""
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

    def __repr__(self):
        """打印类的信息"""
        return '<User %r %r>' % self.username,self.email

if __name__ == '__main__':
    # # 删库
    db.drop_all()
    # 在数据库中创建表User，有几个类就创建一个表
    db.create_all()
    # 若要在已有表中增加列，或删除列，需要手动导出数据，再重新导入，在sqlalchemy不支持在已有表中增删列

    # -------------新增---------------
    # 实例化类
    data = User(id=1,username="01",email="01.qq.com") # id是关键字，可以不用指定，系统自动生成
    # 把类添加到sqlalchemy中
    db.session.add(data)
    # 把操作提交
    db.session.commit()

    # ------------查询---------------
    # 在user表中查id=1的第一个数据,all()为所有数据
    db.User.query().filter_by(id=1).first()

    # ------------更新---------------
    # 只能更新表数据，无法更新表结构
    data = db.User.query.filter_by(id=1).first()
    data.email="2.com"
    db.session.commit()

    # ------------删除---------------
    data = db.User.query.filter_by(id=1).first()
    db.session.delete(data)
    db.session.commit()

